package br.com.viewcar.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.viewcar.entity.Grupo;
import br.com.viewcar.entity.Permissao;
import br.com.viewcar.entity.Usuario;
import br.com.viewcar.entity.Veiculo;
import br.com.viewcar.util.CheckrotaUtil;

@Repository
public class UsuarioService extends BaseService<Integer, Usuario> {

	@Transactional
	public Usuario save(Usuario usuario) {

		usuario.setDataCadastro(new Date());
		usuario.setStatus(true);
		List<Grupo> grupos = usuario.getGrupos();
		List<Permissao> permissoes = usuario.getPermissoes();
		usuario.setGrupos(null);
		usuario.setPermissoes(null);
		usuario = super.save(usuario);
		usuario.setGrupos(grupos);
		usuario.setPermissoes(permissoes);
		return update(usuario);
	}

	@Transactional
	public Usuario delete(Integer id) {

		Usuario usuario = retrieve(id);
		usuario.setStatus(false);
		usuario.setPermissoes(null);
		usuario.setGrupos(null);
		update(usuario);
		return usuario;
	}

	@Transactional(readOnly = true)
	public List<Usuario> retrieveAll() {

		if (CheckrotaUtil.isAdministradorSistema()) {
			return executeResultListQuery("findAll");
		}  else {

			Usuario usuario = retrieve(CheckrotaUtil.retrieveUsuarioLogado().getId());
			List<Usuario> result = new ArrayList<Usuario>();
			result.add(usuario);
			return result;
		}
	}

	@Transactional(readOnly = true)
	public List<Usuario> retriveByMail(String mail){

		List<Usuario> usuarioList = executeResultListQuery("findByMail", mail);
		return usuarioList;
	}
}